package sun.superstring.finaldemo;

public class FinalDemo1 {
    // final修饰静态变量，这个变量今后被称为常量，可以记住一个固定值，
    // 并且程序中不能修改了，通常这个值作为系统的配置信息
    // 常量的名称，建议全部大写，多个单词用下划线链接

    // ①final修饰静态成员变量，必须要先赋值。
    public static final String SCHOOL_NAME = "黑马程序员";

    // ②final修饰实例变量（一般没有意义），一定要先赋值。
    private final String name = "林青霞";


    public static void main(String[] args) {
        // 目标：认识final关键字的作用

        // 3. final修饰变量：表示该变量不能被修改,变量有且仅能被赋值一次
        final int age ;
        age = 18;
        /*
             变量有哪些？
             1、成员变量：
                       ①静态成员变量
                       ②实例成员变量
             2、③局部变量
         */

        // ③final修饰局部变量
        final double rate ;
        rate = 3.14;
//        rate = 3.1415;   // 第二次赋值，报错
        pay(8);

        FinalDemo1 fd = new FinalDemo1();
        System.out.println(fd.name);
//        f.name = "林志玲";  // 第二次赋值，报错

        System.out.println("-------------------");
        final int [] arr = new int []{11,22,33,44};
//        arr = new int []{22,33,44,55}; // 第二次赋值，报错
        arr[2]= 55;

    }

    // pay方法：传入的形参变量值不能被修改，防止恶意修改
    public static void pay(final double z){
//        z = 9;    // 报错
        System.out.println(z);
    }
}


// 1. final修饰类：表示该类不能被继承
final class A{
}
//class B extends A{ } // 报错



// 2. final修饰方法：表示该方法不能被重写
class C{
    final void show(){
        System.out.println("C.m1()");
    }
}
class D extends C{
//    @Override // 报错，不能重写final方法
    //void show(){
    //    System.out.println("D.m1()");
    // }
}
